#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

class Fraction{
public:
    Fraction(int n=0,int d=1):nume(n),deno(d){simplify();}
    Fraction(double d);
    Fraction(const string &str);
    Fraction(const Fraction& f):nume(f.nume),deno(f.deno){}
    Fraction Add(const Fraction &a,const Fraction &b);
    void display();

private:
    void simplify();
    int nume, deno;
    friend Fraction operator+ (const Fraction &a,const Fraction &b);
};

Fraction::Fraction(const string &str): nume(0),deno(1)
{
    char buf[200];
    int i=str.find('/'),j=str.length()-i-1;
    if(i>=0){
        str.copy(buf,i,0);buf[i]=0;nume=atoi(buf);
        str.copy(buf,j,i+1);buf[j]=0;deno=atoi(buf);
    }
}

Fraction::Fraction(double d):nume(d),deno(1)
{
    d=d-nume;
    while(int(d*10)!=0)
        nume=nume*10+int(d*10),deno=deno*10,d=d*10-int(d*10);
    simplify();
}

void Fraction::simplify()
{
    int m,n,r,s=1;
    if(nume!=0&&deno!=0){
        if(deno<0) s=-s,deno=-deno;
        if(nume<0) s=-s,nume=-nume;
        m=nume,n=deno;
        while(n!=0) r=m%n,m=n,n=r;
        if(m!=0) nume=s*nume/m,deno=deno/m;
    }
    else nume=0,deno=1;
}

void Fraction::display()
{
    if(deno!=0&&deno!=1&&nume!=deno) cout<<nume<<"/"<<deno<<endl;
    else cout<<nume<<endl;
}

Fraction Fraction::Add(const Fraction &a,const Fraction &b)
 {
  return Fraction(a.nume*b.deno+a.deno*b.nume, a.deno*b.deno);
 }

Fraction operator + (const Fraction &a,const Fraction &b)
 {
  return Fraction(a.nume*b.deno+a.deno*b.nume, a.deno*b.deno);
 }


int main()
{
    Fraction a(0.256),b(3,4),c,d;
    
    a.display();
    b.display();
    c=a.Add(a,b);
    c.display();
    d=a+b;
    d.display();

    system("pause");
    return 0;
}


